'''
Created on 30/05/2014

@author: Vitor, Monique
'''
from trabalharComArquivos.lerDataSet import lerAnimais, separaAtributos, escolheEntradas
from random import uniform
from redeNeural.perceptron import delta
from funcoesAuxiliares.funcaoHeaviside import heaviside
from trabalharComArquivos.escreverSaidas import escreverOmegas, escreverTeta,\
    escreverErros
from funcoesAuxiliares.verificadoresPosTreino import testaAnimais

if __name__ == '__main__':
    print("\nTreinamento:")
    
    '''
    Aqui, é realizado o treinamento da rede neural(atualização dos omegas e teta)
    '''
    animais = lerAnimais("../arquivos/entradas/treinamento.txt")
    print(str(len(animais)) + " animais no arquivo de treinamento!")
    
    listaAnimais = separaAtributos(animais)
    
    listaEntrada, yDesejados = escolheEntradas(listaAnimais)
    
    #def delta(vetorEntradas, omega,  teta, yDesejado, f, tol = 0.1, passo = 0.1):
    #returna omega, teta, erro
    
    omegas = [None]*10
    for i in range(10):
        omegas[i] = uniform(-0.4, 0.4)
    
    #print("\nLista de Omegas Antes:")
    #print(omegas)
    
    #print("\nTeta:")
    #print(omegas[1])
    
    listaOmega, teta, listaErros = delta(listaEntrada, omegas, omegas[0], yDesejados, heaviside)
    
    #print("\n--------------------------------------------------\n\n\nLista de Omegas:")
    #print(listaOmega)
    
    #print("\nTeta:")
    #print(teta)

    #print("\nErros:")
    #print(listaErros)
    
    
    print("\n\n\n----------------------------------------------------------------")
    print("\nFora do Treinamento:")
    
    '''
    A partir de agora, serão escritos as saidas da funcao delta
    '''
    escreverOmegas("../arquivos/saidas/", listaOmega)
    escreverTeta("../arquivos/saidas/", teta)
    escreverErros("../arquivos/saidas/", listaErros)
    
    '''
    Aqui, é realizado os testes de resultados pós treinamento
    '''
    animaisNaoTreinados = lerAnimais("../arquivos/entradas/foraTreinamento.txt")
    print(str(len(animaisNaoTreinados)) + " animais no arquivo de animais que não estavam no treinamento!")
    
    listaAnimais = separaAtributos(animaisNaoTreinados)
    
    listaEntrada, yDesejados = escolheEntradas(listaAnimais)
    
    listaTeste, acertos = testaAnimais(listaEntrada, yDesejados, listaOmega, teta, "../arquivos/saidas/")
    
    print("\n\n\n-----------------------------------------------------------------")
    print("\n" + str(acertos) + " acerto(s) no teste pós treinamento!")
    
    #for i in range(len(listaTeste)):
    #    print(listaTeste[i])
    pass